///*
// * Copyright (c) 2011-2020, csap (jobob@qq.com).
// * <p>
// * Licensed under the Apache License, Version 2.0 (the "License"); you may not
// * use this file except in compliance with the License. You may obtain a copy of
// * the License at
// * <p>
// * https://www.apache.org/licenses/LICENSE-2.0
// * <p>
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// * License for the specific language governing permissions and limitations under
// * the License.
// */
//
//import com.csap.framework.devtools.AutoGenerator;
//import com.csap.framework.devtools.InjectionConfig;
//import com.csap.framework.devtools.TemplateEngine;
//import com.csap.framework.devtools.config.ConstValEnum;
//import com.csap.framework.devtools.config.DataSourceConfig;
//import com.csap.framework.devtools.config.FileOutConfig;
//import com.csap.framework.devtools.config.GlobalConfig;
//import com.csap.framework.devtools.config.PackageConfig;
//import com.csap.framework.devtools.config.StrategyConfig;
//import com.csap.framework.devtools.config.converts.MySqlTypeConvert;
//import com.csap.framework.devtools.config.po.TableFill;
//import com.csap.framework.devtools.config.po.TableInfo;
//import com.csap.framework.devtools.config.querys.MySqlQuery;
//import com.csap.framework.devtools.config.rules.IColumnType;
//import com.csap.framework.devtools.config.rules.NamingStrategy;
//import com.csap.mybatisplus.annotation.DbType;
//import com.csap.mybatisplus.annotation.FieldFill;
//import com.mysql.cj.jdbc.Driver;
//
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
///**
// * 代码生成器演示
// *
// * @author hubin
// * @since 2016-12-01
// */
//public class MysqlGenerator {
//
//    /**
//     * MySQL 生成演示
//     */
//    public static void main(String[] args) {
//        int result = 1;
//        // 自定义需要填充的字段
//        List<TableFill> tableFillList = new ArrayList<>();
//        tableFillList.add(new TableFill("ASDD_SS", FieldFill.INSERT_UPDATE));
//        Map<String, String> pathInfo = new HashMap<>(6);
//        pathInfo.put(ConstValEnum.ENTITY_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-apidoc/csap-framework-apidoc-admin/src/main/java");
//        pathInfo.put(ConstValEnum.MODEL_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-apidoc/csap-framework-apidoc-admin/src/main/java");
//        pathInfo.put(ConstValEnum.MAPPER_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-apidoc/csap-framework-apidoc-admin/src/main/java");
//        pathInfo.put(ConstValEnum.XML_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-apidoc/csap-framework-apidoc-admin/src/main/java");
//        pathInfo.put(ConstValEnum.SERVICE_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-apidoc/csap-framework-apidoc-admin/src/main/java");
//        pathInfo.put(ConstValEnum.SERVICE_IMPL_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-apidoc/csap-framework-apidoc-admin/src/main/java");
//        pathInfo.put(ConstValEnum.CONTROLLER_PATH.getCode(), "/Users/ycf/Documents/产品/csap/framework/csap-framework-apidoc/csap-framework-apidoc-admin/src/main/java");
//        Map<String, String> map = new HashMap<>();
////        map.put("apidoc", "ApiDoc");
//        map.put("apidoc_path", "ApiDocPath");
////        map.put("apidoc_env", "ApiDocEnv");
////        map.put("apidoc_mock", "ApiDocMock");
////        map.put("apidoc_mock_param", "ApiDocMockParam");
////        map.put("apidoc_project", "ApiDocProject");
////        map.put("apidoc_user", "ApiDocUser");
//        // 代码生成器
//        AutoGenerator mpg = new AutoGenerator().setGlobalConfig(
//                // 全局配置
//                new GlobalConfig()
//                        .setFileOverride(true)// 是否覆盖文件
//                        .setActiveRecord(true)// 开启 activeRecord 模式
//                        .setEnableCache(false)// XML 二级缓存
//                        .setBaseResultMap(true)// XML ResultMap
//                        .setBaseColumnList(true)// XML columList
//                        .setSwagger2(true)
//                        .setAuthor("yangchengfu")
//        ).setDataSource(
//                // 数据源配置
//                new DataSourceConfig()
//                        .setDbType(DbType.MYSQL) // 数据库类型
//                        .setTypeConvert(new MySqlTypeConvert() {
//                            // 自定义数据库表字段类型转换【可选】
//                            @Override
//                            public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
//                                // if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
//                                //    return DbColumnType.BOOLEAN;
//                                // }
//                                return super.processTypeConvert(globalConfig, fieldType);
//                            }
//                        })
//                        .setDbQuery(new MySqlQuery() {
//
//                            /**
//                             * 重写父类预留查询自定义字段<br>
//                             * 这里查询的 SQL 对应父类 tableFieldsSql 的查询字段，默认不能满足你的需求请重写它<br>
//                             * 模板中调用：  table.fields 获取所有字段信息，
//                             * 然后循环字段获取 field.customMap 从 MAP 中获取注入字段如下  NULL 或者 PRIVILEGES
//                             */
//                            @Override
//                            public String[] fieldCustom() {
//                                return new String[]{"NULL", "PRIVILEGES"};
//                            }
//                        })
//                        .setDriverName(Driver.class.getName())
//                        .setUsername("root")
//                        .setPassword("123456")
//                        .setUrl("jdbc:mysql://localhost:3306/csap_apidoc?useUnicode=true&allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=utf8")
//        ).setStrategy(
//                // 策略配置
//                new StrategyConfig()
//                        .setCapitalMode(true)// 全局大写命名
////                 .setDbColumnUnderline(true)//全局下划线命名
////                .setTablePrefix(new String[]{"bmd_", "mp_"})// 此处可以修改为您的表前缀
//                        .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
//                        .setInclude(map.keySet().toArray(new String[]{})) // 需要生成的表
//                        //表对应的class名称 表明>类名
//                        .setTableClassNameMap(map)
//                        // .setExclude(new String[]{"test"}) // 排除生成的表
//                        // 自定义实体父类
//                        // .setSuperEntityClass("com.csap.demo.TestEntity")
//                        // 自定义实体，公共字段
////                .setSuperEntityColumns(new String[]{"test_id"})
//                        .setTableFillList(tableFillList)
//                        .setEntityBooleanColumnRemoveIsPrefix(true)
////                        // 自定义 mapper 父类
////                        .setSuperMapperClass("com.csap.mybatisplus.core.mapper.BaseMapper")
////                        // 自定义 service 父类
////                        .setSuperServiceClass("com.csap.mybatisplus.extension.service.BaseCsapService")
////                        // 自定义 service 实现类父类
////                        .setSuperServiceImplClass("com.csap.mybatisplus.extension.service.impl.BaseCsapServiceImpl")
////                        // 自定义 controller 父类
////                        .setSuperControllerClass("com.csap.mybatisplus.extension.service.web.BaseController")
//                        // 【实体】是否生成字段常量（默认 false）
//                        // public static final String ID = "test_id";
////                .setEntityColumnConstant(true)
//                        // 【实体】是否为构建者模型（默认 false）
//                        // public User setName(String name) {this.name = name; return this;}
//                        .setEntityBuilderModel(true)
//                        // 【实体】是否为lombok模型（默认 false）<a href="https://projectlombok.org/">document</a>
//                        .setEntityLombokModel(true)
//                        // Boolean类型字段是否移除is前缀处理
//                        .setEntityBooleanColumnRemoveIsPrefix(true)
//                        .setRestControllerStyle(true)
////                .setControllerMappingHyphenStyle(true)
//        ).setPackageInfo(
//                // 包配置
//                new PackageConfig()
//                        .setModuleName("admin")
//                        .setParent("com.csap.framework.apidoc")// 自定义包路径
//                        .setPathInfo(pathInfo)
//        );
//        // 执行生成
//        mpg.setTemplateEngine(TemplateEngine.freemarker);
//        mpg.execute();
//    }
//
//}
